var express = require('express');
let path = require("path");
let formidable = require("formidable");
let svgCaptcha = require("svg-captcha")
let fs = require('fs');
var router = express.Router();

/* GET home page. */
router.get('/', function(req, res, next) {
  let userName = req.signedCookies["username"];
  if(userName){
    if(req.session["sex"] == "男"){
      res.send(`欢迎${userName}先生访问首页`);
    }else{
      res.send(`欢迎${userName}女士访问首页`);
    }
  }else{
  res.send(`请登录后访问<a href="/login">登录</a>`);

  }
});

// 登录
router.get("/login",(req,res)=>{
  res.sendFile(path.resolve("./public/login.html"));
})

// 登陆表单提交
router.post("/dologin",(req,res)=>{
  let {tel,pass,yzm} = req.body;

  // 先判断验证码，
  if(yzm.toLowerCase() != (req.session["yzm"]).toLowerCase()){
    res.send("验证码不正确");
    return;
  }
  if(tel == "jack"){
    // 如果登陆成功，生成一个cookie，保存在浏览器端 
    // res.cookie("username","jack",{maxAge:1000*60*60*24,path:"/dologin"});
    res.cookie("username","jack",{maxAge:1000*60*60*24,path:"/",signed:true});
    req.session["sex"] = "男";
    req.session["photo"] = "./001";
    res.send("登录成功");
  }else{
    res.send("账号不正确，必须是jack");
  }
});

// 注册
router.get("/register",(req,res) => {
  res.sendFile(path.resolve("./public/register.html"))
});

// 响应注册
router.post("/doregister",(req,res) => {
  // 初始化上传组件，初始化时可以根据需要传参,参数可以是对象
  let o = {
    multiples:true, //支持多文件上传
    uploadDir:"./upload", //上传文件保存的目录
    maxFileSize:2*1024*1024,  //上传文件最大尺寸(2MB)

  };
  const form = formidable(o);

  // 从请求对象的请求体中解析表单数据
  form.parse(req,(err,fields,files) => {
    // res.writeHead(200, { 'Content-Type': 'application/json' });
    // res.end(JSON.stringify({ fields, files }, null, 2));
    // fields 是表单中普通控件name和value组成的对象
    // files 是上传控件的name属性和上传文件属性组成的对象

    // 提取拓展名，执行更名操作
    console.log(files);
    let {userphoto:{filepath,originalFilename}} = files; //提取原始文件名
    console.log(filepath);
    let extName = path.extname(originalFilename); //提取拓展名(.jpg)
    let newFile = filepath + extName; //在上传地址的绝对地址上补全后缀名  
    fs.renameSync(filepath,newFile);
    
    // 写入文件
    let {tel,pass} = fields;
    let obj = {username:tel,password:pass,userphoto:newFile};
    let arr = JSON.parse(fs.readFileSync("./person.json").toString());
    arr.push(obj);
    fs.writeFileSync("./person.json",JSON.stringify(arr));
    res.send("文件上传成功");
    
  });
})


// 验证码图片
router.get("/yzm", (req, res) => {
  let options = {
    size: 4,// 验证码长度
    width: 400, //验证码图片宽度
    height: 160, //验证码图片的高度
    background: "#fff", //验证码图片的背景颜色
    noise: 4, //验证码图片中的干扰线
    fontSize: 250, //验证码图片中文字大小
    color: true, //验证码图片中文字颜色
    ignoreChars: "i1o0" //容易混淆的字符不要出现在验证码中
  };
  let svg = svgCaptcha.create(options);
  console.log( svg );
  // svg.text 为随机生成的字符串；svg.data为字符串组成的svg格式的图形。

  // 思路：svg.text为随机生成的验证码存储在session中，将svg.data发送到浏览器，然后对比
  req.session["yzm"]  = svg.text;


  res.type("svg");
  res.send( svg.data );
})

// ejs模板渲染
router.get("/student",(req,res)=>{
  let data = {
    title:"0824前端班",
    result:[
      {
        name:"王1",
        sex:"男",
        age:"121"
      },
      {
        name:"王2",
        sex:"女",
        age:"122"
      },
      {
        name:"王3",
        sex:"女",
        age:"123"
      },
      {
        name:"王4",
        sex:"男",
        age:"124"
      }]
  }
  //只能将对象渲染到ejs中，对象中的一级属性可以直接使用
  res.render("student.ejs",data);
})



module.exports = router;
